package cn.net.dckj.system.service.impl;

import cn.net.dckj.common.core.impl.GenericBizServiceImpl;
import cn.net.dckj.common.core.text.Convert;
import java.util.List;

import cn.net.dckj.common.exception.BusinessException;
import cn.net.dckj.common.utils.DateUtils;
import cn.net.dckj.common.utils.file.FileUploadUtils;
import cn.net.dckj.common.utils.file.ftp.FTPProperties;
import cn.net.dckj.common.utils.file.ftp.FTPUtils;
import cn.net.dckj.system.domain.SysAttachment;
import cn.net.dckj.system.service.ISysAttachmentService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import cn.net.dckj.system.mapper.TttMapper;
import cn.net.dckj.system.domain.Ttt;
import cn.net.dckj.system.service.ITttService;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;

/**
 * 测试代码生成Service业务层处理
 * 
 * @author dckj
 * @date 2019-10-14
 */
@Service
public class TttServiceImpl extends GenericBizServiceImpl<TttMapper, Ttt> implements ITttService {
    @Autowired
    private TttMapper tttMapper;

    @Autowired
    private FTPProperties ftpProperties;

    @Autowired
    private ISysAttachmentService sysAttachmentService;

    /**
     * 查询测试代码生成
     * 
     * @param id 测试代码生成ID
     * @return 测试代码生成
     */
    @Override
    public Ttt selectTttById(Long id)
    {
        return tttMapper.selectTttById(id);
    }

    /**
     * 查询测试代码生成列表
     * 
     * @param ttt 测试代码生成
     * @return 测试代码生成
     */
    @Override
    public List<Ttt> selectTttList(Ttt ttt)
    {
        return tttMapper.selectTttList(ttt);
    }

    /**
     * 新增测试代码生成
     * 
     * @param ttt 测试代码生成
     * @return 结果
     */
    @Override
    public int insertTtt(Ttt ttt)
    {
        ttt.setCreateTime(DateUtils.getNowDate());
        return tttMapper.insertTtt(ttt);
    }

    /**
     * 修改测试代码生成
     * 
     * @param ttt 测试代码生成
     * @return 结果
     */
    @Override
    public int updateTtt(Ttt ttt)
    {
        ttt.setUpdateTime(DateUtils.getNowDate());
        return tttMapper.updateTtt(ttt);
    }

    /**
     * 删除测试代码生成对象
     * 
     * @param ids 需要删除的数据ID
     * @return 结果
     */
    @Override
    public int deleteTttByIds(String ids)
    {
        return tttMapper.deleteTttByIds(Convert.toStrArray(ids));
    }

    /**
     * 删除测试代码生成信息
     * 
     * @param id 测试代码生成ID
     * @return 结果
     */
    @Override
    public int deleteTttById(Long id)
    {
        return tttMapper.deleteTttById(id);
    }

    /**
     * 后台使用校验数据方法
     *
     * @param entity 需要校验的实体
     * @return isNotEmpty返回error信息
     */
    @Override
    public String validate(Ttt entity) {
        StringBuilder stringBuilder = new StringBuilder();
        return stringBuilder.toString();
    }

    /**
     * 据自定义查询验证是否存在这个数(excel导入、后台数据验证使用)
     * 需要自己根据业务实现，规则：若数据唯一性一个（如表中仅代码唯一），则返回查询的数据id;
     *                         若数据唯一性多个（如表中代码唯一，名称也必须唯一），则直接返回某某数据存在提示，记录于stringBuilder中
     *                         这时返回值不需要给定，使用默认返回0L，调用使用该方法会根据stringBuilder是否为空判断是否存在数据
     *
     * @param entity        需要验证数据
     * @param stringBuilder 记录数据是否存在信息
     * @return 数据唯一性一个返回查询实体id，要求id>0，若id<1查询无记录；
     *         若数据唯一性多个，默认返回0L，根据stringBuilder是否空判断是否查询存在数据
     */
    @Override
    public Long checkUnique(Ttt entity, StringBuilder stringBuilder) {
        // 设置查询条件
        /*Long id = entity.getId();
        Ttt query = new Ttt();
        query.setId(id);
        Ttt rtn = this.dao.checkUnique(query);
        if (rtn != null && rtn.getId() != null && rtn.getId() > 0) {
            stringBuilder.append("xxxx已经存在!");
            return rtn.getId();
        }*/
        return 0L;
    }

    @Override
    public List<Ttt> selectListToMobile(Ttt entity) {
        return this.dao.selectTttList(entity);
    }

    /**
     * 新增数据，带多附件上传
     *
     * @param entity
     * @param files
     * @return
     */
    @Override
    @Transactional
    public Ttt insert(Ttt entity, List<MultipartFile> files) {
        try {
            int rtn = this.insertTtt(entity);
            Ttt result = rtn > 0 ? entity : null;
            Long id = result.getId();
            if (files != null && files.size() > 0) {
                for (MultipartFile file : files) {
                    if (file != null && !file.isEmpty()) {
                        String fileName = file.getOriginalFilename();
                        long fileSize = file.getSize();
                        String fileType = FileUploadUtils.getExtension(file);
                        String uploadPath = ftpProperties.getUploadUrl();
                        String filePath = FTPUtils.getInstance().uploadFile(uploadPath, file);
                        SysAttachment sysAttachment = new SysAttachment();
                        sysAttachment.setMainId(id);
                        sysAttachment.setEntityName(this.entityClassName);
                        sysAttachment.setAttachmentName(fileName);
                        sysAttachment.setAttachmentSize(fileSize);
                        sysAttachment.setAttachmentType(fileType);
                        sysAttachment.setAttachmentPath(filePath);
                        sysAttachmentService.insertSysAttachment(sysAttachment);
                    }
                }
            }
            return result;
        } catch (Exception e) {
            throw new BusinessException(e.getMessage());
        }
    }
}
